package com.cm.creational.singleton;

/**
 * 内部类
 * 这种方式跟饿汉式方式采用的机制类似，但又有不同。
 * 两者都是采用了类装载的机制来保证初始化实例时只有一个线程
 * 在饿汉式方式是只要Singleton类被装载就会实例化；
 * 1.这种方式采用了类加载的机制来保证初始化实例时只有一个线程。
 * 2.静态内部类方式在SingletonInnerClass类被加载时并不会立即实例化，而是在需要实例化
 * 时，调用getSingletonIn方法，才会加载SingletonInHolder类，从而完成SingletonInnerClass的实例化。
 * 3.类的静态属性只会在第一次加载类的时候初始化，所以在这里，JVM帮助我们
 * 保证了线程的安全性，在类进行初始化时，别的线程是无法进入的。
 * 优点：避免了线程不安全，延迟加载，效率高。
 * @author cm.g
 * @date 2023/6/9 14:40
 */
public class SingletonInnerClass {
    private SingletonInnerClass() {
    }

    private static class SingletonInHolder {

        private static final SingletonInnerClass SINGLETON_IN = new SingletonInnerClass();
    }

    public static SingletonInnerClass getSingletonIn() {
        return SingletonInHolder.SINGLETON_IN;
    }
}
